#ifndef __LOCK_GUARD_HPP__
#define __LOCK_GUARD_HPP__

#include <iostream>
#include <pthread.h>

// LockGuard 类是一个 RAII 风格的互斥锁封装类。
// 当创建 LockGuard 对象时，它会自动获取互斥锁。
// 当 LockGuard 对象销毁时（例如离开作用域），它会自动释放互斥锁。
// 这样可以确保在任何情况下（包括异常发生时）互斥锁都能被正确释放，从而避免死锁。
class LockGuard
{
public:
    // 构造函数：获取互斥锁
    // 参数 mutex: 指向要管理的 pthread_mutex_t 类型互斥锁的指针
    LockGuard(pthread_mutex_t *mutex) : _mutex(mutex)
    {
        pthread_mutex_lock(_mutex); // 构造加锁
    }

    // 析构函数：释放互斥锁
    ~LockGuard()
    {
        if (_mutex)
        { // 安全检查
            pthread_mutex_unlock(_mutex);
        }
    }

private:
    pthread_mutex_t *_mutex; // 指向被管理的互斥锁的指针
};
#endif